function getRedisSessionId(sid) {
  // 为了在redis中区分是本项目的session
  return `sid:${sid}`;
}

class RedisSessionStore {
  constructor(client) {
    this.client = client;
  }
  // 获取redis中存储的session数据
  async get(sid) {
    console.log("get session", sid);
    const id = getRedisSessionId(sid);
    // this.client 指实例化后的redis，即调用redis的get方法
    const data = await this.client.get(id);
    if (!data) {
      return null;
    }
    try {
      const result = JSON.parse(data);
      return result;
    } catch (err) {
      console.error(err);
    }
  }
  // 存储session数据到redis，ttl为存储多长时间删除
  async set(sid, sess, ttl) {
    const id = getRedisSessionId(sid);
    if (typeof ttl === "number") {
      //  把毫秒转化为秒存到数据库
      ttl = Math.ceil(ttl / 1000);
    }
    try {
      const sessStr = JSON.stringify(sess);
      if (ttl) {
        await this.client.setex(id, ttl, sessStr);
      } else {
        await this.client.set(id, sessStr);
      }
    } catch (err) {
      console.error(err);
    }
  }
  //   从redis中删除哪个session
  async destroy(sid) {
    console.log("del session", sid);
    const id = getRedisSessionId(sid);
    this.client.del(id);
  }
}

module.exports = RedisSessionStore;
